package com.platform.common.core.domain.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.platform.common.core.annotation.Excel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.text.StringEscapeUtils;

import java.util.Date;
import java.util.List;

/**
 * 国际出港主单对象 mb_gjc_mawb
 *
 * @author platform
 * @date 2023-04-14
 */
@EqualsAndHashCode(callSuper = true)
@Data
public class GjcMawb extends GjcMawbm {
    private static final long serialVersionUID = 1L;

    /**
     * 运单id
     */
    private Long mawbId;

    /**
     * 机场三字码
     */
    @Excel(name = "机场三字码")
    private String airportCode;

    /**
     * 运单3位前缀
     */
    @Excel(name = "运单3位前缀")
    private String billPrefix;

    /**
     * 运单8位单号
     */
    @Excel(name = "运单8位单号")
    private String billNo;

    /**
     * 承运人二字码
     */
    @Excel(name = "承运人二字码")
    private String carrier;

    /**
     * 货代编码
     */
    @Excel(name = "货代编码")
    private String agentCode;

    /**
     * 货代名称
     */
    @Excel(name = "货代名称")
    private String agentName;

    /**
     * 舱单传输人
     */
    @Excel(name = "舱单传输人")
    private String manifestSender;

    /**
     * 申报业务类型0-一般贸易1-跨境电商
     */
    @Excel(name = "申报业务类型0-一般贸易1-跨境电商")
    private Integer serviceType;

    /**
     * 件数
     */
    @Excel(name = "件数")
    private Long pc;

    /**
     * 重量
     */
    @Excel(name = "重量")
    private Double weight;

    /**
     * 体积
     */
    @Excel(name = "体积")
    private Double volume;
    /**
     * 尺寸
     */
    @Excel(name = "尺寸")
    private String goodsSize;

    /**
     * 计费重量
     */
    @Excel(name = "计费重量")
    private Double cashWeight;

    /**
     * 中文品名
     */
    @Excel(name = "中文品名")
    private String goodCn;

    /**
     * 英文品名
     */
    @Excel(name = "英文品名")
    private String goodEn;

    /**
     * 品名描述
     */
    @Excel(name = "品名描述")
    private String goodDescription;

    /**
     * 特码
     */
    @Excel(name = "特码")
    private String spCode;

    /**
     * 子码
     */
    @Excel(name = "子码")
    private String subCode;

    /**
     * 货物类型
     */
    @Excel(name = "货物类型")
    private String cargoType;

    /**
     * 货物类型名称
     */
    @Excel(name = "货物类型名称")
    private String cargoTypeName;

    /**
     * 包装类型
     */
    @Excel(name = "包装类型")
    private String packageType;

    /**
     * 货源地
     */
    @Excel(name = "货源地")
    private String origin;

    /**
     * 货物目的地
     */
    @Excel(name = "货物目的地")
    private String dest;

    /**
     * 货物目的地名称
     */
    @Excel(name = "货物目的地名称")
    private String destName;

    /**
     * 航班日期
     */
    @Excel(name = "航班日期")
    private String fdate;

    /**
     * 航班号
     */
    @Excel(name = "航班号")
    private String fno;

    /**
     * 航程：始发站
     */
    @Excel(name = "航程：始发站")
    private String fdep;

    /**
     * 航程：经停站
     */
    @Excel(name = "航程：经停站")
    private String fstop;

    /**
     * 航程：目的站
     */
    @Excel(name = "航程：目的站")
    private String fdest;

    /**
     * 航程：目的站名称
     */
    @Excel(name = "航程：目的站名称")
    private String fdestName;

    /**
     * 审核状态：0-待审核1-审核通过2-审核不通过
     */
    @Excel(name = "审核状态：0-待审核1-审核通过2-审核不通过")
    private Integer approveStatus;

    /**
     * 运抵申报状态0-待申报1-已申报2-接收申报
     */
    @Excel(name = "运抵申报状态0-待申报1-已申报2-接收申报")
    private Integer arriveDecStatus;

    /**
     * 预配申报状态0-待申报1-已申报2-接收申报
     */
    @Excel(name = "预配申报状态0-待申报1-已申报2-接收申报")
    private Integer prePlanDecStatus;

    /**
     * 配载申报状态0-待申报1-已申报2-接收申报
     */
    @Excel(name = "配载申报状态0-待申报1-已申报2-接收申报")
    private Integer loadDecStatus;

    /**
     * 理货申报状态0-待申报1-已申报2-接收申报
     */
    @Excel(name = "理货申报状态0-待申报1-已申报2-接收申报")
    private Integer tallyDecStatus;

    /**
     * 理货申报时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "理货申报时间")
    private Date tallyDectime;

    /**
     * 装载时间
     */
    @Excel(name = "装载时间")
    private String loadingTime;

    /**
     * 装卸开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "装卸开始时间")
    private Date actualDatetime;

    /**
     * 装卸结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "装卸结束时间")
    private Date completedTime;

    /**
     * 经营企业
     */
    @Excel(name = "经营企业")
    private String companyName;

    /**
     * 运抵时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "运抵时间")
    private Date arriveTime;

    /**
     * 卸货完成时间
     */
    @Excel(name = "卸货完成时间")
    private String unloadTime;

    /**
     * 车牌
     */
    @Excel(name = "车牌")
    private String carNum;

    /**
     * 车重
     */
    @Excel(name = "车重")
    private Double carWeight;

    /**
     * 收费状态0-未收费，1-部分收费 2 全部收费完成
     */
    @Excel(name = "收费状态0-未收费，1-部分收费 2 全部收费完成")
    private Integer chargingStatus;

    /**
     * 附加信息
     */
    private String attachInfo;

    /**
     * 支付方式CC-到付，PP-预付，FF-免费
     */
    @Excel(name = "付方式CC-到付，PP-预付，FF-免费")
    private String payMethod;

    /**
     * 入库状态 0-未入库 1-部分入库 2-全部入库完成
     */
    @Excel(name = "入库状态 0-未入库 1-部分入库 2-全部入库完成")
    private Integer warehouseStatus;

    /**
     * 配载状态 0-未配载 1-部分配载 2-全部配载
     */
    @Excel(name = "配载状态 0-未配载 1-部分配载 2-全部配载")
    private Integer stowageStatus;

    /**
     * 理货状态 0-未理货 1-部分理货 2-全部理货
     */
    @Excel(name = "理货状态 0-未理货 1-部分理货 2-全部理货")
    private Integer tallyStatus;

    /**
     * 拉货状态 0-未拉货 1-部分拉货 2-全部拉货
     */
    @Excel(name = "拉货状态 0-未拉货 1-部分拉货 2-全部拉货")
    private Integer pullStatus;

    /**
     * 退货状态 0-未退货 1-部分退货 2-全部退货
     */
    @Excel(name = "退货状态 0-未退货 1-部分退货 2-全部退货")
    private Integer returnedStatus;

    /**
     * 时间戳
     */
    @Excel(name = "时间戳")
    private String ts;

    /**
     * 审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "审核时间")
    private Date approveTime;

    /**
     * 审核人
     */
    @Excel(name = "审核人")
    private String approveBy;

    /**
     * 预计到港时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "预计到港时间")
    private Date preArriveTime;

    /**
     * 监管方式
     */
    @Excel(name = "监管方式")
    private String superviseMode;

    /**
     * 商品项
     */
    @Excel(name = "商品项")
    private String goods;

    /**
     * 中转站
     */
    @Excel(name = "中转站")
    private String transferStation;

    /**
     * 中转前航班
     */
    @Excel(name = "中转前航班")
    private String preTransfer;

    /**
     * 中转前提运单号
     */
    @Excel(name = "中转前提运单号")
    private String preTransferBillNo;

    /**
     * 是否分批 0不分批 1分批
     */
    @Excel(name = "是否分批 0不分批 1分批")
    private Integer transportSplitIndicator;
    /**
     * 海关申报航班日期
     */
    @Excel(name = "海关申报航班日期")
    private String cusFdate;

    /**
     * 海关申报航班号
     */
    @Excel(name = "海关申报航班号")
    private String cusFno;
    /**
     * 海关查验状态(0:查验,1:放行)
     */
    @Excel(name = "海关查验状态(0:查验,1:放行)")
    private String cusStatus;

    /**
     * 海关查验状态操作时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "海关查验状态操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date cusStatusTime;

    /**
     * 跨电放行状态(0:查验,1:放行)
     */
    @Excel(name = "跨电放行状态(0:查验,1:放行)")
    private String crossStatus;

    /**
     * 跨电放行状态操作时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "跨电放行状态操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date crossStatusTime;

    /**
     * 运单进卡件数
     */
    @Excel(name = "运单进卡件数")
    private Long inCardPc;

    /**
     * 运单进卡重量
     */
    @Excel(name = "运单进卡重量")
    private Double inCardWeight;

    /**
     * 运单进卡状态
     */
    @Excel(name = "运单进卡状态 0-未进卡 1-已进卡")
    private Integer inCardStatus;

    /**
     * 收运件数
     */
    @Excel(name = "收运件数")
    private Long receivePc;

    /**
     * 收运重量
     */
    @Excel(name = "收运重量")
    private Double receiveWeight;

    /**
     * 收运状态
     */
    @Excel(name = "收运状态")
    private Integer receiveStatus;

    /**
     * 复称件数
     */
    @Excel(name = "复称件数")
    private Long complexCallPc;

    /**
     * 复称重量
     */
    @Excel(name = "复称重量")
    private Double complexCallWeight;

    /**
     * 复称状态
     */
    @Excel(name = "复称状态")
    private Integer complexCallStatus;

    /**
     * 配载件数
     */
    @Excel(name = "配载件数")
    private Long stowagePc;

    /**
     * 配载重量
     */
    @Excel(name = "配载重量")
    private Double stowageWeight;

    /**
     * 堆位件数
     */
    @Excel(name = "堆位件数")
    private Long heapLocationPc;

    /**
     * 堆位重量
     */
    @Excel(name = "堆位重量")
    private Double heapLocationWeight;

    /**
     * 堆位号
     */
    @Excel(name = "堆位号")
    private String heapLocationNum;

    /**
     * 装机件数
     */
    @Excel(name = "装机件数")
    private Long pretendMachinePc;

    /**
     * 装机重量
     */
    @Excel(name = "装机重量")
    private Double pretendMachineWeight;

    /**
     * 装机状态
     */
    @Excel(name = "装机状态")
    private Integer pretendMachineStatus;

    /**
     * 拉货件数
     */
    @Excel(name = "拉货件数")
    private Long pullInPc;

    /**
     * 拉货重量
     */
    @Excel(name = "拉货重量")
    private Double pullInWeight;

    /**
     * 拉货状态
     */
    @Excel(name = "拉货状态")
    private Integer pullInStatus;

    /**
     * 退货件数
     */
    @Excel(name = "退货件数")
    private Long returnPc;

    /**
     * 退货重量
     */
    @Excel(name = "退货重量")
    private Double returnWeight;

    /**
     * 退货状态
     */
    @Excel(name = "退货状态")
    private Integer returnStatus;

    /**
     * 收费件数
     */
    @Excel(name = "收费件数")
    private Long chargingPc;

    /**
     * 收费重量
     */
    @Excel(name = "收费重量")
    private Double chargingWeight;

    /**
     * 库存件数
     */
    @Excel(name = "库存件数")
    private Long inventoryPc;

    /**
     * 库存重量
     */
    @Excel(name = "库存重量")
    private Double inventoryWeight;

    /**
     * 库存状态
     */
    @Excel(name = "库存状态")
    private Integer inventoryStatus;
    /**
     * 卡口预约状态：0，未预约  1，已预约 2，预约失败
     */
    @Excel(name = "卡口预约状态")
    private Integer bayonetStatus;
    /**
     * 卡口预约回执信息
     */
    @Excel(name = "卡口预约回执信息")
    private String bayonetMsg;

    /**
     * 主单下面的分单
     */
    private List<GjcHawb> gjcHawbList;

    /**
     * 主单下特货信息
     */
    private List specialgoodsList;

    /**
     * 特货主键集合
     */
    private List<String> goodsIdList;

    /**
     * 主单下面的生命周期
     */
    private List<GjcMawbNodes> gjcMawbNodesList;
    /***
     * 标签列表
     */
    private List<GjcMawbTag> tagList;

    /**
     * 改配状态
     */
    @Excel(name = "改配状态")
    private Integer changeStatus;
    /**
     * 费率
     */
    @Excel(name = "费率")
    private String rate;

    /**
     * 安检申报结果
     */
    private String securityCheckStatus;

    /**
     * 计划起飞时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date scheduledTakeoff;

    /**
     * 是否转关
     */
    private String isTransit;

    /**
     * 实际起飞时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date actualTakeoff;

    public void setGoodEn(String goodEn) {
        goodEn = StringEscapeUtils.unescapeHtml4(goodEn);
        this.goodEn = goodEn;
    }

    public void setGoodCn(String goodCn) {
        goodCn = StringEscapeUtils.unescapeHtml4(goodCn);
        this.goodCn = goodCn;
    }

}
